package com.errol.generic.baiducloud.faceai.pojo.personverify;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.renjia.service.generic.baiducloud.basic.pojo.AbstractBaiduApiResultDTO;

/**
 * @author zhang xiao bin
 * @version v1.0
 * @date 2021/03/29
 * @since v
 **/
public class BaiduPersonVerifyV2ResultDTO extends AbstractBaiduApiResultDTO {
    public enum ResultStatus {
        /**
         * 成功返回结果
         */
        SUCCESS,
        /**
         * 执行失败，抛出异常
         */
        EXCEPTION,
        /**
         * 照片 base64 编码后超过 4M
         */
        IMAGE_TOO_BIG,
        /**
         * 返回错误码，具体原因输出 errCode 和 errMsg
         */
        FAILURE,
    }

    private ResultStatus resultStatus;

    /**
     * 与公安小图相似度可能性，用于验证生活照与公安小图是否为同一人，有正常分数时为[0~1]，推荐阈值0.8，超过即判断为同一人
     */
    private Float result;
    /**
     * 拓展信息json串，只有选择了ext_fields时才会返回具体信息。选择faceliveness返回具体活体分值信息，选择qualities返回人脸质量检测信息。两者可以同时选择，半角逗号分割
     * 拓展信息当前需求用不到，暂未封装，数据格式如下：
     * +faceliveness	否	string	活体检测值，单帧图片建议阈值，小于此值则认为不是活体，超过则判断为活体
     * +qualities	否	string	质量检测结果
     * ++occlusion	否	string	人脸遮挡情况
     * +++left_eye	否	string	左眼被遮挡的比例，取值范围[0~1]，数值越大遮挡越多；小于阈值时有返回，默认阈值0.6
     * +++right_eye	否	string	右眼被遮挡的比例，取值范围[0~1]，数值越大遮挡越多；小于阈值时有返回，默认阈值0.6
     * +++nose	否	string	鼻子被遮挡的比例，取值范围[0~1]，数值越大遮挡越多；小于阈值时有返回，默认阈值0.7
     * +++mouth	否	string	嘴巴被遮挡的比例，取值范围[0~1]，数值越大遮挡越多；小于阈值时有返回，默认阈值0.7
     * +++left_cheek	否	string	左脸颊被遮挡的比例，取值范围[0~1]，数值越大遮挡越多；小于阈值时有返回，默认阈值0.8
     * +++right_cheek	否	string	右脸颊被遮挡的比例，取值范围[0~1]，数值越大遮挡越多；小于阈值时有返回，默认阈值0.8
     * +++chin	否	string	下巴被遮挡的比例，取值范围[0~1]，数值越大遮挡越多；小于阈值时有返回，默认阈值0.8
     * ++blur	否	string	人脸模糊度阈值，取值范围[0~1]，数值越大越模糊；小于阈值时有返回，默认阈值0.7
     * ++illumination	否	string	脸部光照的灰度值阈值，取值范围[0~255]，数值越大光照越强；大于阈值时有返回，默认阈值30
     * ++completeness	否	string	人脸完整度，0或1, 0为人脸溢出图像边界，1为人脸都在图像边界内
     * 接口文档地址：https://ai.baidu.com/ai-doc/FACE/9k3co86to
     */
    @JsonProperty(value = "ext_info")
    private String extInfo;

    public BaiduPersonVerifyV2ResultDTO() {
    }

    public BaiduPersonVerifyV2ResultDTO(ResultStatus resultStatus) {
        this.resultStatus = resultStatus;
    }

    public ResultStatus getResultStatus() {
        if (resultStatus == null) {
            resultStatus = Integer.valueOf(0).equals(getErrCode()) ? ResultStatus.SUCCESS : ResultStatus.FAILURE;
        }
        return resultStatus;
    }

    public Float getResult() {
        return result;
    }

    public String getExtInfo() {
        return extInfo;
    }
}
